<?php

function mi_autoload($nombre_clase) {
    require_once CAMINO . "app/$nombre_clase.php";
}

function mi_exception_handler($ext) {
    echo "<pre class=\"error_php\">getCode = {$ext->getCode()}\r\n
getFile = {$ext->getFile()}\r\n
getLine = {$ext->getLine()}\r\n
getMessage = {$ext->getMessage()}\r\n
getPrevious = {$ext->getPrevious()}\r\n
getTraceAsString = {$ext->getTraceAsString()}\r\n\r\ngetTrace = </pre>";
    var_dump($ext->getTrace());
    die();
}

function mi_error_handler($errno, $errstr, $errfile, $errline, $errcontext = array()) {
    echo "<pre>errno: $errno\r\n
errstr: $errstr\r\n
errfile: $errfile\r\n
errline: $errline\r\n
errcontext:</pre>";
    var_dump($errcontext);
    die();
}

function text_input($str) {
    $str = trim($str);
    $str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
    $str = stripslashes($str);
    return $str;
}

/**
 * Evita inyeccion SQL
 * @param unknown $str
 * @return mixed
 */
function evitar_inyeccion($str) {
    $str = str_replace("'", "''", $str);
    return $str;
}

/**
 * Analiza que el texto tenga una longitud determinada.
 * 
 * @param string $txt texto a analizar.
 * @param integer $limite si se pasa como argumento establece un numero maximo 
 * de caracteres para que sea un texto valido.
 * @param integer $minimo Si se pasa como argumento establece un numero minimo
 * de caracteres para que sea un texto valido. 
 * @return boolean FALSE si esta fuera del rango
 */
function validar_texto($txt, $limite = FALSE, $minimo = FALSE) {
    if ($limite !== FALSE && strlen($txt) > $limite) {
        return FALSE;
    }
    if ($minimo !== FALSE && strlen($txt) < $minimo) {
        return FALSE;
    }
    return TRUE;
}

/**
 * Valida un email con filter_var
 * 
 * @param string $email email a analizar
 * @param string $limite si se pasa como argumento establece un numero maximo 
 * de caracteres para que sea un email valido. 
 * @return mixed FALSE si el filtro falla, si no devuelve el email pasado
 *  a minusculas
 */
function validar_email($email, $limite = FALSE) {
    if (trim($email) == '') {
        return FALSE;
    }
    if ($limite !== FALSE && strlen($email) > $limite) {
        return FALSE;
    }
    $email = strtolower($email);
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

/**
 * Indica si falta algun campo obligatorio por rellenar
 * 
 * @param type $array $_POST con valores enviados 
 * @return boolean TRUE si faltan, FALSE en caso contrario
 */
function faltan_post_obligatorios($array) {
    foreach ($array as $value) {
        if (trim($_POST[$value]) == '') {
            return TRUE;
        }
    }
    return FALSE;
}

function mostrar_session_if_isset($param, $borrar = TRUE) {
    if (isset($_SESSION[$param])) {
        echo text_input($_SESSION[$param]);
        if ($borrar) {
            unset($_SESSION[$param]);
        }
    }
}

/**
 * 
 * @param type $param
 */
function mostrar_post_if_isset($param) {
    if (isset($_POST[$param])) {
        echo text_input($_POST[$param]);
    }
}

function mostrar_checked_if_isset($param) {
    if (isset($_POST[$param])) {
        echo ' checked="checked" ';
    }
}

function mostrar_checked_if_isset_and_value($name, $value) {
    if (isset($_POST[$name]) && $_POST[$name] == $value) {
        echo ' checked="checked" ';
    }
}

function selected_if_isset_and_value($name, $value) {
    if (isset($_POST[$name]) && $_POST[$name] == $value) {
        return ' selected="selected" ';
    } else {
        return ' ';
    }
}

function establecer_session_global($name_session, $id_session, $key, $value) {
    session_name($name_session);
    session_id($id_session);
    session_start();
    $_SESSION[$key] = $value;
    session_write_close();
}

function establecer_session_privada($key, $value) {
    global $id_session_privada;
    session_name(SESSIONBROWSER);
    session_id($id_session_privada);
    session_start();
    $_SESSION[$key] = $value;
    session_write_close();
}

function destruir_session($name_session, $id_session) {
    session_name($name_session);
    session_id($id_session);
    session_start();
    foreach ($_SESSION as $key => $value) {
        unset($_SESSION[$key]);
    }
    session_destroy();
    session_unset();
    if (ini_get('session.use_cookies')) {
        $params = session_get_cookie_params();
        setcookie($name_session, '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
    }
    session_regenerate_id(TRUE);
    session_write_close();
}

function buscar_key_session($name_session, $id_session, $key) {
    session_name($name_session);
    session_id($id_session);
    session_start();
    $result = NULL;
    if (isset($_SESSION[$key])) {
        $result = $_SESSION[$key];
    }
    session_write_close();
    return $result;
}

function mostrar_session($name_session, $id_session) {
    session_name($name_session);
    session_id($id_session);
    session_start();
    $cadena = '<pre>id = ' . session_id() . '</pre>';
    $cadena .= '<pre>name = ' . session_name() . '</pre>';
    $cadena .= '<pre>' . var_export($_SESSION, TRUE) . '</pre>';
    session_write_close();
    return $cadena;
}

function mostrar_todas_las_sessiones() {
    global $id_session_privada;
    global $id_session_facebook;
    global $name_session_facebook;
    global $user;
    global $user_profile;

    global $usuario_conectado;
    $cadena = '<pre class="blanco">SESSIONINFOR</pre>';
    $cadena .= '<div class="blanco">';
    $cadena .= mostrar_session(SESSIONINFOR, 'IDSESSIONINFOR');
    $cadena .= '</div>';
    $cadena .= '<pre class="violeta">SESSIONBROWSER</pre>';
    $cadena .= '<div class="violeta">';
    $cadena .= mostrar_session(SESSIONBROWSER, $id_session_privada);
    $cadena .= '</div>';
    $cadena .= '<pre class="khaki">SESSION DEL FACEBOOK</pre>';
    $cadena .= '<div class="khaki">';
    $cadena .= mostrar_session($name_session_facebook, $id_session_facebook);
    $cadena .= '</div>';
    $cadena .= '<pre class="verde">POST</pre>';
    $cadena .= '<pre class="verde">' . var_export($_POST, TRUE) . '</pre>';
    $cadena .= '<pre class="azul">GET</pre>';
    $cadena .= '<pre class="azul">' . var_export($_GET, TRUE) . '</pre>';
    $cadena .= '<pre class="rojo">FILES</pre>';
    $cadena .= '<pre class="rojo">' . var_export($_FILES, TRUE) . '</pre>';
    $cadena .= '<pre class="amarillo">COOKIE</pre>';
    $cadena .= '<pre class="amarillo">' . var_export($_COOKIE, TRUE) . '</pre>';
    $cadena .= '<pre class="rosa">SERVER</pre>';
    $cadena .= '<pre class="rosa">' . CAMINO . '</pre>';
    //$cadena .= '<pre class="rosa">' . var_export($_SERVER, TRUE) . '</pre>';

    $cadena .= '<pre class="face">FACEBOOK</pre>';
    $cadena .= '<pre class="face">$user</pre>';
    $cadena .= '<pre class="face">';
    $cadena .= ($user) ? $user : 'No hay user';
    $cadena .= '</pre>';
    $cadena .= '<pre class="face">$user_profile</pre>';
    $cadena .= '<pre class="face">';
    $cadena .= ($user_profile) ? var_export($user_profile, TRUE) : 'No hay user_profile';
    $cadena .= '</pre>';
    $cadena .= '<pre class="blanco">$usuario_conectado</pre>';
    $cadena .= '<pre class="blanco">' . var_export($usuario_conectado, TRUE) . '</pre>';
    return $cadena;
}

function destruir_todas_las_sessiones() {
    global $id_session_privada;
    global $id_session_facebook;
    global $name_session_facebook;
    destruir_session(SESSIONINFOR, 'IDSESSIONINFOR');
    destruir_session(SESSIONBROWSER, $id_session_privada);
    destruir_session($name_session_facebook, $id_session_facebook);
    if (isset($_COOKIE[COOKIEACCESO])) {
        $expire = time() - 2592000; // 30 dias
        setcookie(COOKIEACCESO, '', $expire);
    }
}

function enviar_email($to, $subject, $action, $option, $nombre, $content) {
    return TRUE;
    $to = $nombre . ' <' . $to . '>';
    $from = 'administrador@practicaphpforoluismiguel.com';
    $sitio_web = 'http://practicaphpforoluismiguel.com/';
    $link = $sitio_web . $action . '/' . $option;
    $message = '<html>
            ' . "\r\n" . ' <head>
            ' . "\r\n" . ' <title>Foro p&uacute;blico</title>
            ' . "\r\n" . ' </head>
            ' . "\r\n" . ' <body>
            ' . "\r\n" . ' <img src="' . $sitio_web . 'web/images/logo.png" height="128"
            ' . "\r\n" . '     alt="logo de foro publico" />
            ' . "\r\n" . ' <div style="height: 40px;
            ' . "\r\n" . '     background: url(\'' . $sitio_web . 'web/images/header.png\') repeat-x left top;
            ' . "\r\n" . '     background-color: #999999;">
            ' . "\r\n" . ' <h1 style="font-weight: bold; text-indent: 36px; line-height: 40px; 
            ' . "\r\n" . '     background: url(\'' . $sitio_web . 'web/images/icono.png\') no-repeat left top; 
            ' . "\r\n" . '     font-size: 16px; color: #ffffff;">Foro p&uacute;blico</h1>
            ' . "\r\n" . ' </div><br /><br />
            ' . "\r\n" . ' <h2>Hola ' . $nombre . '</h2>
            ' . "\r\n" . ' <p>' . $content . '</p>
            ' . "\r\n" . ' <p><a href="' . $link . '" target="_blank">
            ' . "\r\n" . $link . '</a></p><br/><br/><br/><br/>
            ' . "\r\n" . ' <br/><br/><br/><br/><p>Un saludo</p><br/><br/><br/></body>
            ' . "\r\n" . ' </html>';

    date_default_timezone_set('Europe/Madrid');
    $headers = 'MIME-Version: 1.0' . "\r\n" .
            'Content-type: text/html; charset:UTF-8' . "\r\n" .
            'Date: ' . date('r', $_SERVER['REQUEST_TIME']) . "\r\n" .
            'From: Foro publico <' . $from . '>' . "\r\n" .
            'Sender: Foro publico <' . $from . '>' . "\r\n" .
            'Bcc: nmcqmh_lmza@hotmail.com' . "\r\n" .
            'Keywords: foro, php, practica, luismiguel' . "\r\n" .
            'Comments: ' . $content . "\r\n" .
            'Reply-To: ' . $from . "\r\n" .
            'X-Mailer: PHP/' . phpversion() . "\r\n" .
            'X-Originating-IP: ' . $_SERVER['SERVER_ADDR'] . "\r\n";
    if (mail($to, $subject, $message, $headers)) {
        return TRUE;
    }
    return FALSE;
}

/**
 * Si se establece el parametro $option la url del link seria de esta forma (para la pagina 2)
 * <pre>http://practicaphpforoluismiguel.com/action/3/pag:2</pre>
 * Si no se establece devuelve lo siguiente (para la pagina 2)
 * <pre>http://practicaphpforoluismiguel.com/action/2</pre>
 * 
 * @param int $total
 * @param int $activa
 * @param string $action
 * @param int $option
 * @return string
 */
function crear_listado_paginas($total, $activa, $action, $option = FALSE) {
    $listado = '<table class="menu_paginas"><tbody><tr>' . "\r\n";
    $listado .= '<td>P&aacute;gina ' . $activa . ' de ' . $total . '</td>' . "\r\n";
    $inicio = ($activa - 2) < 1 ? 1 : $activa - 2;
    $fin = ($activa + 2) > $total ? $total : $activa + 2;
    $listado .= ($inicio > 1) ?
            '<td><a href="' . DOMINIO . $action . '/1">Primera</a></td>' . "\r\n" : '';
    for ($idx = $inicio; $idx <= $fin; $idx++) {
        $listado .= '<td' . ($idx == $activa ? ' class="activa"' : '')
                . '><a href="' . DOMINIO . $action . ($option !== FALSE ? '/' . $option . '/pag:' : '/') . $idx . '">' . $idx . '</a></td>' . "\r\n";
    }
    $listado .= ($fin < $total) ?
            '<td><a href="' . DOMINIO . $action . '/' . $total . '">&Uacute;ltima</a></td>' . "\r\n" : '';
    $listado .= '</tr></tbody></table>' . "\r\n";
    return $listado;
}

function recortar_titulo($titulo) {
    if (strlen($titulo) > 50) {
        return substr($titulo, 0, 50) . '...';
    }
    return $titulo;
}

/**
 * 
 */
function var_facebook($str) {
    return isset($str) ? $str : '';
}
